#include<iostream>
using namespace std;
int main(){
	//定义一个基本的lambda
	auto p=[](int a,int b)->int{return a+b;};

	int a=0;
	int b=1;
	
	/*
	 * 	这样的代码是没有办法通过编译的，所以可以知道想使用外部变量就必须捕获。
		auto q=[]()->int{++a;++b;return 0;};
	*/
	//这样定义是对的
	auto q=[&]()->int{++a;++b;return 0;};
	q();
	cout<<a<<b<<endl;
	/*
	 *	这样的代码无法编译，原因是a和b是按照值传递进入的想要直接按照其修改那就得mutable
	 *
		auto s=[=]()->int{++a;++b;return 0;};
	*/
	//这是对的，但是没用，mutable修改的是传来的副本
	auto s=[=]()mutable->int{++a;++b;return 0;};
	s();
	cout<<a<<b<<endl;
}
